package com.styletransfer.controller;

import com.styletransfer.model.ApiResponse;
import com.styletransfer.model.LoginRequest;
import com.styletransfer.model.User;
import com.styletransfer.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * 用户控制器
 *
 * 提供用户相关的API接口，包括注册、登录、获取用户信息、更新用户信息等
 */
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    /**
     * 用户注册
     *
     * @param user 用户对象
     * @return API响应
     */
    @PostMapping("/register")
    public ApiResponse<Map<String, Object>> register(@RequestBody User user) {
        return userService.register(user);
    }

    /**
     * 用户登录
     *
     * @param loginRequest 登录请求
     * @return API响应，包含用户信息和JWT令牌
     */
    @PostMapping("/login")
    public ApiResponse<Map<String, Object>> login(@RequestBody LoginRequest loginRequest) {
        return userService.login(loginRequest.getUsername(), loginRequest.getPassword());
    }

    /**
     * 获取当前用户信息
     *
     * @return API响应
     */
    @GetMapping("/info")
    public ApiResponse<User> getCurrentUser() {
        return userService.getCurrentUser();
    }

    /**
     * 根据ID获取用户信息
     *
     * @param id 用户ID
     * @return API响应
     */
    @GetMapping("/{id}")
    public ApiResponse<User> getUserById(@PathVariable Long id) {
        return userService.findById(id);
    }

    /**
     * 更新用户信息
     *
     * @param user 用户信息
     * @return API响应
     */
    @PostMapping("/update")
    public ApiResponse<User> updateUser(@RequestBody User user) {
        return userService.updateUser(user);
    }

    /**
     * 修改密码
     *
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @return API响应
     */
    @PostMapping("/change-password")
    public ApiResponse<Void> changePassword(@RequestParam String oldPassword, @RequestParam String newPassword) {
        return userService.changePassword(oldPassword, newPassword);
    }

//    /**
//     * 更新用户状态（管理员功能）
//     *
//     * @param id 用户ID
//     * @param status 状态
//     * @return API响应
//     */
//    @PutMapping("/status/{id}")
//    public ApiResponse<Void> updateUserStatus(@PathVariable Long id, @RequestParam Integer status) {
//        return userService.updateUserStatus(id, status);
//    }

    /**
     * 搜索用户（管理员功能）
     *
     * @param keyword 关键词
     * @return API响应
     */
    @GetMapping("/search")
    public ApiResponse<List<User>> searchUsers(@RequestParam String keyword) {
        return userService.searchUsers(keyword);
    }
}
